package com.taskmanage
{

	/**
	 * 任务对象
	 * @author Boder
	 * @Time 2011-9-6 16:28:29
	 */
	public class TaskObj
	{
		//执行间隔
		public var taskDeplay  :  Number  =  0; //毫秒值1000等于1秒
		//记录任务管理器起点时间
		public var startTime  :  Number   =  0;
		//用来计算间隔
		public var gap  :  int            =  -1;
		//执行次数
		public var taskTimes  :  int      =  -1; //默认不停止
		//进程id
		public var taskId  :  int         =  -1;

		//要执行的任务
		public var fun  :  Function       =  null;

		/**
		 *构造函数
		 * @param fn 要执行的任务
		 * @param times 执行次数
		 * @param deplay 时间间隔
		 *
		 */
		public function TaskObj(fn  :  Function, deplay  :  Number  =  1000, times  :  int  =  -1)
		{
			fun  =  fn;
			taskTimes  =  times;
			taskDeplay  =  deplay;
		}

		/**
		 * 执行这个任务
		 * 每执行一次后需要计算剩余执行次数
		 * @param pdx 任务管理器的当前一共跑了多少次
		 */
		public function doTask(pdx  :  Number)  :  void
		{
			var i  :  int  =  (pdx - startTime) % gap;

			if(i == 0)
			{ //到达本任务的执行时间点
				//trace("看看是否在执行? i  =" + i + " taskId=" + taskId);
				fun.apply();
				countLeveTimes(); //计算剩余次数
			}
		}

		/**
		 *taskmanager中timer每间隔多少时间会处理一次,根据这个deplay来计算这个间隔
		 * @param deplay
		 * @return
		 *
		 */
		public function countGap(deplay  :  Number)  :  void
		{
			if(deplay == 0 || deplay == -1)
			{
				throw new Error("时间太快!");
			}
			gap  =  taskDeplay / deplay;
			gap  =  gap < 1 ? 1 : gap;
		}

		/**
		 *处理任务
		 *
		 */
		private function countLeveTimes()  :  void
		{
			if(taskTimes > 0)
			{
				taskTimes--;
			}

			if(taskTimes == 0)
			{
				ImTaskManager.getInstance().removeTask(this);
			}
		}
	}
}
